package util;

import geral.Bairro;
import geral.Cidade;
import geral.Estado;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import seguranca.Acao;
import seguranca.Acesso;
import seguranca.Grupo;
import seguranca.Modulo;
import seguranca.Usuario;

public class BD {

	static {
		estados = new ArrayList<Estado>();
		cidades = new ArrayList<Cidade>();
		bairros = new ArrayList<Bairro>();
		acoes = new ArrayList<Acao>();
		modulos = new ArrayList<Modulo>();
		grupos = new ArrayList<Grupo>();
		usuarios = new ArrayList<Usuario>();
		acessos = new ArrayList<Acesso>();
	}

	private static List<Estado> estados;
	private static List<Cidade> cidades;
	private static List<Bairro> bairros;
	private static List<Acao> acoes;
	private static List<Modulo> modulos;
	private static List<Grupo> grupos;
	private static List<Usuario> usuarios;
	private static List<Acesso> acessos;
	
	public static List<Acesso> getAcessos() {
		Collections.sort(acessos);
		return acessos;
	}
	
	public static List<Acesso> getAcessosBy(String descricao) {
		Collections.sort(usuarios);
		
		List<Acesso> acessos = new ArrayList<Acesso>();
		for (Acesso acesso : BD.acessos) {
			
			if( acesso.getEnderecoRede().toUpperCase().contains(descricao.toUpperCase()) ){
				acessos.add(acesso);
			}
			
		}
		
		Collections.sort(acessos);
		return acessos;
	}

	
	public static List<Usuario> getUsuarios() {
		Collections.sort(usuarios);
		return usuarios;
	}

	public static List<Usuario> getUsuariosBy(String descricao) {
		Collections.sort(usuarios);
		
		List<Usuario> usuarios = new ArrayList<Usuario>();
		for (Usuario usuario : BD.usuarios) {
			
			if( usuario.getNome().toUpperCase().contains(descricao.toUpperCase()) ){
				usuarios.add(usuario);
			}
			
		}
		
		Collections.sort(usuarios);
		return usuarios;
	}

	
	public static List<Estado> getEstados() {
		Collections.sort(estados);
		return estados;
	}
	
	public static List<Estado> getEstadosBy(String descricao) {
		Collections.sort(estados);
		
		List<Estado> estados = new ArrayList<Estado>();
		for (Estado estado : BD.estados) {
			
			if( estado.getNome().toUpperCase().contains(descricao.toUpperCase()) ){
				estados.add(estado);
			}
			
		}
		
		Collections.sort(estados);
		return estados;
	}

	public static List<Cidade> getCidades() {
		Collections.sort(cidades);
		return cidades;
	}
	
	public static List<Cidade> getCidadesBy(String descricao) {
		Collections.sort(cidades);
		
		List<Cidade> cidades = new ArrayList<Cidade>();
		for (Cidade cidade : BD.cidades) {
			
			if( cidade.getNome().toUpperCase().contains(descricao.toUpperCase()) ){
				cidades.add(cidade);
			}
			
		}
		
		Collections.sort(cidades);
		return cidades;
	}

	public static List<Bairro> getBairros() {
		Collections.sort(bairros);
		return bairros;
	}
	
	public static List<Bairro> getBairrosBy(String descricao) {
		Collections.sort(bairros);
		
		List<Bairro> bairros = new ArrayList<Bairro>();
		for (Bairro bairro : BD.bairros) {
			
			if( bairro.getNome().toUpperCase().contains(descricao.toUpperCase()) ){
				bairros.add(bairro);
			}
			
		}
		
		Collections.sort(bairros);
		return bairros;
	}

	public static List<Acao> getAcoes() {
		Collections.sort(acoes);
		return acoes;
	}

	public static List<Acao> getAcoesBy(String descricao) {
		Collections.sort(bairros);
		
		List<Acao> acoes = new ArrayList<Acao>();
		for (Acao acao : BD.acoes) {
			
			if( acao.getDescricao().toUpperCase().contains(descricao.toUpperCase()) ){
				acoes.add(acao);
			}
			
		}
		
		Collections.sort(acoes);
		return acoes;
	}
	
	public static List<Modulo> getModulos() {
		Collections.sort(modulos);
		return modulos;
	}
	
	public static List<Modulo> getModulosBy(String descricao) {
		Collections.sort(bairros);
		
		List<Modulo> modulos = new ArrayList<Modulo>();
		for (Modulo modulo : BD.modulos) {
			
			if( modulo.getDescricao().toUpperCase().contains(descricao.toUpperCase()) ){
				modulos.add(modulo);
			}
			
		}
		
		Collections.sort(modulos);
		return modulos;
	}

	public static List<Grupo> getGrupos() {
		Collections.sort(grupos);
		return grupos;
	}

	public static List<Grupo> getGruposBy(String descricao) {
		Collections.sort(bairros);
		
		List<Grupo> grupos = new ArrayList<Grupo>();
		for (Grupo modulo : BD.grupos) {
			
			if( modulo.getDescricao().toUpperCase().contains(descricao.toUpperCase()) ){
				grupos.add(modulo);
			}
			
		}
		
		Collections.sort(grupos);
		return grupos;
	}
	
}
